package com.cskaoyan.service;

import com.cskaoyan.mapper.AccountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;

/**
 * @author stone
 * @date 2022/10/04 16:36
 */
@Service
public class AccountServiceImpl implements AccountService{
    @Autowired
    AccountMapper accountMapper;


    //@Transactional(readOnly = true)
    //@Transactional(timeout = 5)//超时时间是5s
    @Transactional(timeout = 5,noRollbackFor = ArithmeticException.class)
    @Override
    public void transfer(Integer fromId, Integer destId, Integer money) {
        Integer fromMoney = accountMapper.selectMoneyById(fromId);
        Integer destMoney = accountMapper.selectMoneyById(destId);

        fromMoney -= money;
        destMoney += money;

        Integer finalFromMoney = fromMoney;
        Integer finalDestMoney = destMoney;

        accountMapper.updateMoneyById(fromId, finalFromMoney);
        if (money > 100) {
            int i = 1 / 0;
        }

        accountMapper.updateMoneyById(destId, finalDestMoney);

    }
}
